package cn.xiaohuodui.service;

import cn.xiaohuodui.component.UserComponent;
import cn.xiaohuodui.constant.ErrorCodeDefine;
import cn.xiaohuodui.dao.User2Mapper;
import cn.xiaohuodui.exceptions.BussException;
import cn.xiaohuodui.form.user.*;
import cn.xiaohuodui.utils.BCrypt;
import cn.xiaohuodui.utils.CodeUtil;
import cn.xiaohuodui.utils.EncryptUtil;
import cn.xiaohuodui.utils.sms.AliyunSmsUtil;
import cn.xiaohuodui.vo.user.UserVo;
import com.aliyuncs.exceptions.ClientException;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

/**
 * Created by ShangJiaHao on 2017/6/20.
 */
@Service
public class UserService {
//    @Autowired
//    User2Mapper user2Mapper;
//    @Autowired
//    UserComponent userComponent;
//
//
//    /**
//     * 用户登录
//     *
//     * @param loginForm
//     * @return
//     * @throws BussException
//     */
//    public UserVo login(LoginForm loginForm) throws BussException {
//        User user = user2Mapper.selectByPhone(loginForm.getAccount());
//        if (user == null) {
//            throw new BussException(ErrorCodeDefine.USER_NOT_FOUND);
//        }
//        if (BCrypt.hashpw(loginForm.getPassword(), user.getSalt()).equals(user.getPassword())) {
//            //更新session
//            String token = EncryptUtil.md5(user.getPhone() + user.getPassword() + user.getSalt() + System.currentTimeMillis());
//            userComponent.newSession(user.getId(), loginForm.getPlatform(), loginForm.getDevice(), token);
//            UserVo userVo = new UserVo();
//
//            BeanUtils.copyProperties(user, userVo);
//            userVo.setToken(token);
//            return userVo;
//        } else {
//            throw new BussException(ErrorCodeDefine.PASSWORD_NOT_VALID);
//        }
//    }
//
//    /**
//     * 注册
//     *
//     * @param form
//     * @return
//     * @throws BussException
//     */
//    public int reg(UserPhoneForm form) throws BussException {
//        int smsId = userComponent.validateSms(form.getPhone(), form.getCode());
//        if (smsId == 0) {
//            throw new BussException(ErrorCodeDefine.SMS_CODE_NOT_VALID);
//        }
//        User user = user2Mapper.selectByPhone(form.getPhone());
//        if (user != null) {
//            throw new BussException(ErrorCodeDefine.PHONE_IS_USED);
//        }
//        String salt = BCrypt.gensalt();
//        String hashPwd = BCrypt.hashpw(form.getPassword(), salt);
//        form.setSalt(salt);
//        form.setHashPwd(hashPwd);
//
//        user = userComponent.insertUser(form);
//        userComponent.markSmsUsed(smsId);
//        return user.getId();
//    }
//
//    /**
//     * 找回密码
//     *
//     * @param form
//     * @throws BussException
//     */
//    public void findPwd(FindPwdForm form) throws BussException {
//        int smsId = userComponent.validateSms(form.getPhone(), form.getCode());
//        if (smsId == 0) {
//            throw new BussException(ErrorCodeDefine.SMS_CODE_NOT_VALID);
//        }
//
//        User user = user2Mapper.selectByPhone(form.getPhone());
//        if (user == null) {
//            throw new BussException(ErrorCodeDefine.USER_NOT_FOUND);
//        }
//        String salt = org.springframework.security.crypto.bcrypt.BCrypt.gensalt();
//        String hashPwd = org.springframework.security.crypto.bcrypt.BCrypt.hashpw(form.getPassword(), salt);
//        //更新密码
//        user2Mapper.updatePwd(user.getId(), hashPwd, salt, System.currentTimeMillis());
//        userComponent.markSmsUsed(smsId);
//    }
//
//    /**
//     * 重置密码
//     *
//     * @param form
//     * @throws BussException
//     */
//    public void updatePwd(ResetPwdForm form) throws BussException {
//        User user = user2Mapper.selectByPrimaryKey(form.getUid());
//        if (user == null) {
//            throw new BussException(ErrorCodeDefine.USER_NOT_FOUND);
//        }
//
//        if (org.springframework.security.crypto.bcrypt.BCrypt.hashpw(form.getOldPassword(), user.getSalt()).equals(user.getPassword())) {
//            String salt = org.springframework.security.crypto.bcrypt.BCrypt.gensalt();
//            String hashPwd = org.springframework.security.crypto.bcrypt.BCrypt.hashpw(form.getPassword(), salt);
//            //更新密码
//            user2Mapper.updatePwd(user.getId(), hashPwd, salt, System.currentTimeMillis());
//        } else {
//            throw new BussException(ErrorCodeDefine.PASSWORD_NOT_VALID);
//        }
//    }
//
//    /**
//     * 送注册验证码
//     *
//     * @param form
//     * @throws BussException
//     */
//    public void sendRegSms(PhoneForm form) throws BussException {
//        User user = user2Mapper.selectByPhone(form.getPhone());
//        if (user != null) {
//            throw new BussException(ErrorCodeDefine.PHONE_IS_USED);
//        }
//        String smsCode = CodeUtil.genSmsCode();
//        try {
//            AliyunSmsUtil.sendPhoneCode(form.getPhone(), smsCode);
//        } catch (ClientException e) {
//            e.printStackTrace();
//            throw new BussException(ErrorCodeDefine.SMS_SEND_ERROR);
//        }
//        userComponent.insertSms(form.getPhone(), smsCode);
//        return;
//    }
//
//    /**
//     * 发送找回密码短信
//     *
//     * @param form
//     * @throws BussException
//     */
//    public void sendPwdSms(PhoneForm form) throws BussException {
//        User user = user2Mapper.selectByPhone(form.getPhone());
//        if (user == null) {
//            throw new BussException(ErrorCodeDefine.PHONE_IS_NOT_FOUND);
//        }
//        String smsCode = CodeUtil.genSmsCode();
//        try {
//            AliyunSmsUtil.sendPwdCode(form.getPhone(), smsCode);
//        } catch (ClientException e) {
//            e.printStackTrace();
//            throw new BussException(ErrorCodeDefine.SMS_SEND_ERROR);
//        }
//        userComponent.insertSms(form.getPhone(), smsCode);
//        return;
//    }
//
//
//    /**
//     * 修改基本资料
//     *
//     * @param profileForm
//     */
//    public void updateProfile(ProfileForm profileForm) {
//        User user = user2Mapper.selectByPrimaryKey(profileForm.getUid());
//        user.setId(profileForm.getUid());
//        user.setAvatar(profileForm.getAvatar());
//        user.setNickname(profileForm.getNickname());
//        user.setIntro(profileForm.getIntro());
//        user.setUpdated(System.currentTimeMillis());
//        user.setGender(profileForm.getGender());
//        user.setJob(profileForm.getJob());
//        user.setCover(profileForm.getCover());
//
//        user2Mapper.updateByPrimaryKeySelective(user);
//    }
//
//    /**
//     * 登出
//     *
//     * @param logoutForm
//     */
//    public void logout(LogoutForm logoutForm) {
//        userComponent.setSessionExpired(logoutForm.getUid());
//    }
}
